home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Gekkan Dennou Club 142
/
Gekkan Dennou Club - 2000.3 Vol. 142 (Japan).7z
/
Gekkan Dennou Club - 2000.3 Vol. 142 (Japan) (Track 1).bin
/
tools
/
s_tool
/
sub.c
< prev
next >
Wrap
Text File
|
1999-06-03
|
23KB
|
1,037 lines
#include "JX250.H"
#include <sys\iocs.h>
#include <sys\dos.h>
#include <sys\scsi.h>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
/**************************************************
最初に呼び出す
**************************************************/
void InitScrren()
{
ViewScrren();
}
/*********************************************
(破壊された)画面を書き直す
*********************************************/
void ViewScrren()
{
int i,x,y,a;
int ssp;
UNchar *m;
_iocs_g_clr_on();
GraphicV(0);
ssp=_iocs_b_super(0);
for(y=0;y<32;y++){
a=TADDS(0,y);
m=&MapAdds[y*32];
for(x=0;x<32;x++,a+=32)
GGSP16_64_S(a,*m++);
}
if ( ssp>=0 )
_iocs_b_super(ssp);
//---- 文字
p_12K(17*16,1*16+3,"原点X");
p_12K(22*16,1*16+3,"原点Y");
p_12K(17*16,3*16+3,"幅");
p_12K(22*16,3*16+3,"高さ");
p_12K(20*16,14*16+3,"濃度補正");
p_12K(20*16,16*16+3,"明度補正");
p_12K(20*16,20*16+3,"γ補正");
p_12K(20*16,25*16+3,"しきい値");
p_12K(20*16,29*16+3,"ドロップアウトカラー");
//---- スキャン
SwIconWaku(33,22,7*2,2*2);
p_16K(33*8,22*8+8," プリスキャン");
SwIconWaku(49,22,7*2,2*2);
p_16K(49*8,22*8+8," スキャン");
//--
i=ImageMode;
ImageMode=-1;
ChanImageMode(i); // カラー
i=ImageColMode;
ImageColMode=-1;
ChanImageColMode(i); // 多値
i=ImageDirec;
ImageDirec=-1;
ChanImageDirec(i); // 縦
i=PojiNegaMode;
PojiNegaMode=-1;
ChanPojiNegaMode(i); // ポジネガ
//- 取り込み座標
i=ScanMode;
ScanMode=-1;
ScanSetMode(i);
//--
_iocs_tpalet(0,0);
for(y=1;y<4;y++)
_iocs_tpalet(y,RGB(y*10+1,y*10+1,y*10+1) );
_iocs_tpalet(4,RGB(15,15,15));
_iocs_tpalet(8,RGB(31,31,31));
//- プリ座標
PosSetDraw(PreX1,PreY1,PreX2,PreY2,PreUnit);
PreviewView();
GraphicV(-1);
}
/************************
ICON 枠
************************/
void SwIconWaku(x,y,lx,ly)
int x,y,lx,ly;
{
struct _boxptr PP;
PP.x1=x*8;
PP.y1=y*8;
PP.x2=PP.x1+lx*8-1;
PP.y2=PP.y1+ly*8-1;
PP.color=PalTable[0xB];
_iocs_fill(&PP);
PP.linestyle=0xFFFF;
PP.x1=x*8+1;
PP.y1=y*8+1;
PP.x2=PP.x1+lx*8-1-1;
PP.y2=PP.y1+ly*8-1-1;
PP.color=PalTable[1];
_iocs_box(&PP);
PP.x1=x*8;
PP.y1=y*8;
PP.x2=PP.x1+lx*8-1-1;
PP.y2=PP.y1+ly*8-1-1;
PP.color=PalTable[15];
_iocs_box(&PP);
}
/****************************************************
モード変更 カラー/白黒
*****************************************************/
void ChanImageMode(md)
int md;
{
int x,y;
int ssp;
if ( md==ImageMode )
return;
ImageMode=md;
ssp=_iocs_b_super(0);
if ( md==0 ){
// 0;カラー
GGSP16_ON_S(TADDS(17,14),MapAdds[17+14*32],MapAdds[18+14*32]);
GGSP16_OF_S(TADDS(17,15),MapAdds[17+15*32],MapAdds[18+15*32]);
if ( ImageColMode==0 ){
// 0;多値
// 明度~γ補正の B までを表示
for(x=22;x<=30;x++)
for(y=17;y<=19;y++)
GGSP16_64_S(TADDS(x,y),MapAdds[x+y*32]);
for(y=21;y<=24;y++)
GGSP16_64_S(TADDS(x,y),MapAdds[x+y*32]);
// しきい値
GGSP16_64_S(TADDS(22,26),MapAdds[22+26*32]);
for(x=22;x<=30;x++)
for(y=26;y<=28;y++)
GGMESHES_13(TADDS(x,y));
} else {
// 1;二値
// 明度、しきい値を表示
for(x=22;x<=30;x++){
for(y=17;y<=19;y++)
GGSP16_64_S(TADDS(x,y),MapAdds[x+y*32]);
for(y=26;y<=28;y++)
GGSP16_64_S(TADDS(x,y),MapAdds[x+y*32]);
}
// γ補正
GGSP16_64_S(TADDS(22,21),MapAdds[22+21*32]);
for(x=22;x<=30;x++)
for(y=21;y<=24;y++)
GGMESHES_13(TADDS(x,y));
}
// ドロップカラーをメッシュ
for(x=23;x<=30;x++)
GGMESHES_13(TADDS(x,30));
//
LightSetDraw(-1,LightR,LightG,LightB);
GammaSetView(-1,GammaR,GammaG,GammaB);
ThreSetView(-1,ThreR,ThreG,ThreB);
} else {
// 1;白黒
GGSP16_OF_S(TADDS(17,14),MapAdds[17+14*32],MapAdds[18+14*32]);
GGSP16_ON_S(TADDS(17,15),MapAdds[17+15*32],MapAdds[18+15*32]);
// R -> BW に
GGSP16_64_S(TADDS(22,17),MapAdds[22+17*32]-1);
GGSP16_64_S(TADDS(22,21),MapAdds[22+21*32]-1);
GGSP16_64_S(TADDS(22,26),MapAdds[22+26*32]-1);
// 明度,γ,しきい値の G,B をメッシュ
for(x=22;x<=30;x++){
GGMESHES_13(TADDS(x,18));
GGMESHES_13(TADDS(x,19));
GGMESHES_13(TADDS(x,22));
GGMESHES_13(TADDS(x,23));
GGMESHES_13(TADDS(x,24)); //all
GGMESHES_13(TADDS(x,27));
GGMESHES_13(TADDS(x,28));
}
if ( ImageColMode==0 ){
// 0;多値 しきい値
for(x=22;x<=30;x++)
GGMESHES_13(TADDS(x,26));
} else {
// 1;二値 γ補正
for(x=22;x<=30;x++)
GGMESHES_13(TADDS(x,21));
}
// ドロップカラー表示
DropColorSetView(DropColor);
//
LightSetDraw(LightM,-1,-1,-1);
GammaSetView(GammaM,-1,-1,-1);
ThreSetView(ThreM,-1,-1,-1);
}
if ( ssp>=0 )
_iocs_b_super(ssp);
}
/****************************************************
モード変更 多値/二値
*****************************************************/
void ChanImageColMode(md)
int md;
{
int x,y;
int ssp;
if ( md==ImageColMode )
return;
ImageColMode=md;
ssp=_iocs_b_super(0);
if ( md==0 ){
// 多値
if ( FullColor!=0 ){
GGSP16_ON_S(TADDS(17,17),MapAdds[17+17*32],MapAdds[18+17*32]);
GGSP16_OF_S(TADDS(17,18),MapAdds[17+18*32],MapAdds[18+18*32]);
GGSP16_OF_S(TADDS(17,19),MapAdds[17+19*32],MapAdds[18+19*32]);
} else {
GGSP16_OF_S(TADDS(17,17),MapAdds[17+17*32],MapAdds[18+17*32]);
GGSP16_ON_S(TADDS(17,18),MapAdds[17+18*32],MapAdds[18+18*32]);
GGSP16_OF_S(TADDS(17,19),MapAdds[17+19*32],MapAdds[18+19*32]);
}
// しきい値メッシュ
for(y=26;y<=28;y++)
for(x=22;x<=30;x++)
GGMESHES_13(TADDS(x,y));
// 濃度表示
for(x=23;x<=30;x++)
GGSP16_64_S(TADDS(x,15),MapAdds[x+15*32]);
BrightSetDraw(Bright);
// γ表示
if ( ImageMode==0 ){
for(y=21;y<=24;y++)
for(x=22;x<=30;x++)
GGSP16_64_S(TADDS(x,y),MapAdds[x+y*32]);
} else {
GGSP16_64_S(TADDS(22,21),MapAdds[22+21*32]-1);
for(x=23;x<=30;x++)
GGSP16_64_S(TADDS(x,21),MapAdds[x+21*32]);
}
GammaSetView(GammaM,GammaR,GammaG,GammaB);
} else {
// 二値
GGSP16_OF_S(TADDS(17,17),MapAdds[17+17*32],MapAdds[18+17*32]);
GGSP16_OF_S(TADDS(17,18),MapAdds[17+18*32],MapAdds[18+18*32]);
GGSP16_ON_S(TADDS(17,19),MapAdds[17+19*32],MapAdds[18+19*32]);
// しきい値表示
if ( ImageMode==0 ){
// カラーの二値
for(y=26;y<=28;y++)
for(x=22;x<=30;x++)
GGSP16_64_S(TADDS(x,y),MapAdds[x+y*32]);
} else {
// 白黒の二値
for(x=22;x<=30;x++){
GGSP16_64_S(TADDS(x,26),MapAdds[x+26*32]);
for(y=27;y<=28;y++)
GGMESHES_13(TADDS(x,y));
}
GGSP16_64_S(TADDS(22,26),MapAdds[22+26*32]-1);
}
ThreSetView(ThreM,ThreR,ThreG,ThreB);
// 濃度メッシュ
for(x=23;x<=30;x++)
GGMESHES_13(TADDS(x,15));
// γメッシュ
for(y=21;y<=24;y++)
for(x=22;x<=30;x++)
GGMESHES_13(TADDS(x,y));
}
if ( ssp>=0 )
_iocs_b_super(ssp);
}
/****************************************************
モード変更 縦/横
*****************************************************/
void ChanImageDirec(md)
int md;
{
int ssp;
if ( md==ImageDirec )
return;
ImageDirec=md;
ssp=_iocs_b_super(0);
if ( md==0 ){
// 縦
GGSP16_ON_S(TADDS(17,26),MapAdds[17+26*32],MapAdds[18+26*32]);
GGSP16_OF_S(TADDS(17,27),MapAdds[17+27*32],MapAdds[18+27*32]);
} else {
// 横
GGSP16_OF_S(TADDS(17,26),MapAdds[17+26*32],MapAdds[18+26*32]);
GGSP16_ON_S(TADDS(17,27),MapAdds[17+27*32],MapAdds[18+27*32]);
}
if ( ssp>=0 )
_iocs_b_super(ssp);
PersView();
}
/****************************************************
モード変更 ポジ/ネガ
*****************************************************/
void ChanPojiNegaMode(md)
int md;
{
int ssp;
if ( md==PojiNegaMode )
return;
PojiNegaMode=md;
ssp=_iocs_b_super(0);
if ( md==0 ){
// ポジ
GGSP16_ON_S(TADDS(17,29),MapAdds[17+29*32],MapAdds[18+29*32]);
GGSP16_OF_S(TADDS(17,30),MapAdds[17+30*32],MapAdds[18+30*32]);
} else {
// ネガ
GGSP16_OF_S(TADDS(17,29),MapAdds[17+29*32],MapAdds[18+29*32]);
GGSP16_ON_S(TADDS(17,30),MapAdds[17+30*32],MapAdds[18+30*32]);
}
if ( ssp>=0 )
_iocs_b_super(ssp);
}
/****************************************************
取り込み表示(設定)
*****************************************************/
void ScanSetMode(md)
int md;
{
int ssp;
double a;
UNchar b1[16],b2[16],b3[16],b4[16];
ssp=_iocs_b_super(0);
if ( md==0 ){
// DOT 指定
if ( ScanMode!=0 ){ // スキャン値の単位 0;DOT 1;DPI
ScanMode=0;
GGSP16_ON_S(TADDS(17,8),MapAdds[17+8*32],MapAdds[18+8*32]);
GGSP16_OF_S(TADDS(17,9),MapAdds[17+9*32],MapAdds[18+9*32]);
}
} elif ( md==1 ){
if ( ScanMode!=1 ){ // スキャン値の単位 0;DOT 1;DPI
ScanMode=1;
GGSP16_OF_S(TADDS(17,8),MapAdds[17+8*32],MapAdds[18+8*32]);
GGSP16_ON_S(TADDS(17,9),MapAdds[17+9*32],MapAdds[18+9*32]);
}
}
if ( ssp>=0 )
_iocs_b_super(ssp);
//
sprintf(b1,"%5d",ScanDotX/DOTB); //X
sprintf(b2,"%5d",ScanDotY/DOTB); //Y
a=(double)ScanDpiX/DPIB;
if ( a<0. || a>99999 )
jstrcpy(b3," err ");
elif ( a<1000. )
sprintf(b3,"%5.1f",a);
else sprintf(b3,"%5d",(int)a);
a=(double)ScanDpiY/DPIB;
if ( a<0. || a>99999 )
jstrcpy(b4," err ");
elif ( a<1000. )
sprintf(b4,"%5.1f",a);
else sprintf(b4,"%5d",(int)a);
//
CRTVDISP();
// DPI
p_12W(320+2, 96+2,b1); //X
p_12W(320+2,112+2,b2); //Y
// DOT
p_12W(320+2,128+2,b3); //X
p_12W(320+2,144+2,b4); //Y
PersView();
return;
}
/*+++++++++++++++*/
void ScanSetDraw(md,x,y)
int md,x,y;
{
int x1,y1;
if ( md==0 ){
// DOT 指定
x1=ScanDotX;
y1=ScanDotY;
if ( x>=0 && x<4096*DOTB )
ScanDotX=x;
if ( y>=0 )
ScanDotY=y;
// DPI を計算
if ( x>=0 || y>=0 ){
if ( ScanMode==0 ){ // スキャン値の単位 0;DOT 1;DPI
CalcScanDpi();
} else {
if ( CalcScanDD()!=0 ){
CalcScanDpi();
}
}
}
} elif ( md==1 ){
// DPI 指定
x1=ScanDpiX;
y1=ScanDpiY;
if ( x>=0 )
ScanDpiX=x;
if ( y>=0 )
ScanDpiY=y;
// DOT を計算
if ( x>=0 || y>=0 ){
if ( ScanMode!=0 ){ // スキャン値の単位 0;DOT 1;DPI
CalcScanDot();
} else {
if ( CalcScanDD()!=0 ){
CalcScanDot();
}
}
}
}
ScanSetMode(-1);
return;
}
/***************************************************
DOT/DPI から DPI/DOT を計算
***************************************************/
void CalcScanPara()
{
if ( ScanMode==0 ) // DOT
CalcScanDpi();
else CalcScanDot();
ScanSetMode(-1);
}
/*++++++++++++*/
void CalcScanDpi()
{
double a;
ScanDpiX=1;
ScanDpiY=1;
if ( ImageDirec==0 ){ // 0;縦 1;横
a=(double)((PreX2-PreX1)+1);
if ( a!=0 )
ScanDpiX=( (double)(ScanDotX)*DPIB*1200./DOTB+(a/2.)) /a;
a=(double)((PreY2-PreY1)+1);
if ( a!=0 )
ScanDpiY=( (double)(ScanDotY)*DPIB*1200./DOTB+(a/2.)) /a;
} else {
a=(double)((PreX2-PreX1)+1);
if ( a!=0 )
ScanDpiX=( (double)(ScanDotY)*DPIB*1200./DOTB+(a/2.)) /a;
a=(double)((PreY2-PreY1)+1);
if ( a!=0 )
ScanDpiY=( (double)(ScanDotX)*DPIB*1200./DOTB+(a/2.)) /a;
}
if ( jxscanner==_JX250_ || jxscanner==_JX270_ ){
if ( ScanDpiX>1591*DPIB )
ScanDpiX=-1;
if ( ScanDpiY>1591*DPIB )
ScanDpiY=-1;
} elif ( jxscanner==_JX325_ ){
if ( ScanDpiX>600*DPIB )
ScanDpiX=-1;
if ( ScanDpiY>600*DPIB )
ScanDpiY=-1;
} else {
// JX330,JX350
if ( ScanDpiX>2400*DPIB )
ScanDpiX=-1;
if ( ScanDpiY>2400*DPIB )
ScanDpiY=-1;
}
}
/*++++++++++++*/
void CalcScanDot()
{
double a;
if ( ImageDirec==0 ){ // 0;縦 1;横
a=(double)((PreX2-PreX1)+1);
ScanDotX=( (double)(ScanDpiX)*a*DOTB/DPIB/1200. );
a=(double)((PreY2-PreY1)+1);
ScanDotY=( (double)(ScanDpiY)*a*DOTB/DPIB/1200. );
} else {
a=(double)((PreX2-PreX1)+1);
ScanDotY=( (double)(ScanDpiX)*a*DOTB/DPIB/1200. );
a=(double)((PreY2-PreY1)+1);
ScanDotX=( (double)(ScanDpiY)*a*DOTB/DPIB/1200. );
}
}
/***********************************************
DOT/DPI からスキャン範囲を決める
[rts] -1 ならエラー
***********************************************/
int CalcScanDD()
{
double a;
int i;
int x1,x2,y1,y2;
if ( ImageDirec==0 ){ // 0;縦 1;横
a = ( (double)(ScanDotX)*1200./DOTB*DPIB+(a/2.))/(ScanDpiX);
} else {
a = ( (double)(ScanDotY)*1200./DOTB*DPIB+(a/2.))/(ScanDpiX);
}
i=a;
if ( i<1 || i>=10224 )
return(-1);
x1=PreX1;
x2=x1+i-1;
if ( x2>=10224 ){
i=x2-10224;
x2=-i;
x1=-i;
if ( x1<0 )
return(-1);
}
if ( ImageDirec==0 ){ // 0;縦 1;横
a = ( (double)(ScanDotY)*1200./DOTB*DPIB+(a/2.))/(ScanDpiY);
} else {
a = ( (double)(ScanDotX)*1200./DOTB*DPIB+(a/2.))/(ScanDpiY);
}
i=a;
if ( i<1 || i>=14064 )
return(-1);
y1=PreY1;
y2=y1+i-1;
if ( y2>=14064 ){
i=y2-14064;
y2=-i;
y1=-i;
if ( y1<0 )
return(-1);
}
PreX1=x1;
PreX2=x2;
PreY1=y1;
PreY2=y2;
return(0);
}
/****************************************************
座標表示(設定)
*****************************************************/
void PosSetDraw(x,y,lx,ly,mm)
int x,y,lx,ly,mm;
{
UNchar *m,*s;
int a,f,i;
int ssp;
int vxo1,vyo1,vxo2,vyo2,op;
double x1,x2,y1,y2;
ssp=_iocs_b_super(0);
f=0;
op=PreUnit;
if ( x>=0 ){
// セット
vxo1=PreXV1;
vyo1=PreYV1;
vxo2=PreXV2;
vyo2=PreYV2;
PreX1=x; PreY1=y;
PreX2=lx; PreY2=ly;
if ( PreX1==PreX2 )
PreX2++;
if ( PreY1==PreY2 )
PreY2++;
if ( mm>=0 )
PreUnit=mm; // プリスキャン値の単位 0;dot 1;cm 2;inch
f=-1;
//-
if ( PreBai==0 ){
PreXV1 = 16+PreX1*231/10224;
PreYV1 = 16+PreY1*479/14064;
PreXV2 = 16+PreX2*231/10224;
PreYV2 = 16+PreY2*479/14064;
} else {
i=1<<PreBai;
PreXV1 = 16+(PreX1*231*i/10224)-(PrePX*i);
PreYV1 = 16+(PreY1*479*i/14064)-(PrePY*i);
PreXV2 = 16+(PreX2*231*i/10224)-(PrePX*i)+i-1;
PreYV2 = 16+(PreY2*479*i/14064)-(PrePY*i)+i-1;
}
}
m=&MapAdds[25+6*32];
a=TADDS(25,6);
if ( PreUnit==0 ){
// dot
x1=(double)PreX1/10.;
y1=(double)PreY1/10.;
x2=(double)(PreX2-1)/10.;
y2=(double)(PreY2-1)/10.;
s="%5.0f";
if ( mm>=0 ){
GGSP16_64_S(a,m[0]);
GGICON_ON_S(a);
GGSP16_64_S(a+1024*16,m[32]);
GGSP16_64_S(a+1024*32,m[64]);
}
} elif ( PreUnit==1 ){
// cm
x1=(double)PreX1*216./10224.;
y1=(double)PreY1*216./10224.;
x2=(double)(PreX2-1)*216./10224.;
y2=(double)(PreY2-1)*216./10224.;
s="%5.1f";
if ( mm>=0 ){
GGSP16_64_S(a,m[0]);
GGSP16_64_S(a+1024*16,m[32]);
GGICON_ON_S(a+1024*16);
GGSP16_64_S(a+1024*32,m[64]);
}
} else {
// inch
x1=(double)PreX1*852./1022400.;
y1=(double)PreY1*852./1022400.;
x2=(double)(PreX2-1)*852./1022400.;
y2=(double)(PreY2-1)*852./1022400.;
s="%5.2f";
if ( mm>=0 ){
GGSP16_64_S(a,m[0]);
GGSP16_64_S(a+1024*16,m[32]);
GGSP16_64_S(a+1024*32,m[64]);
GGICON_ON_S(a+1024*32);
}
}
CRTVDISP_S();
//- 原点
p_12_sprintf(272+2,32+2,s,x1); //X
p_12_sprintf(352+2,32+2,s,y1); //Y
//- 幅,高さ
p_12_sprintf(272+2,64+2,s,(x2-x1));
p_12_sprintf(352+2,64+2,s,(y2-y1));
if ( f ){
if ( vxo2>0 && vyo2>0 ){
DrawWaku(vxo1,vyo1,vxo2,vyo2,0,0);
/*
PP.x=vxo1+1;
PP.y=vyo1+1;
PP.x1=vxo2-vxo1-1;
PP.y1=vyo2-vyo1-1;
PP.vram_page=0x8003;
PP.fill_patn=0x0000;
CRTVDISP_S();
_iocs_txbox((void*)&PP);
PP.x--;
PP.y--;
_iocs_txbox((void*)&PP);
*/
} else {
CRTVDISP_S();
}
DrawWaku(PreXV1,PreYV1,PreXV2,PreYV2,0,-1);
/*
PP.x=PreXV1+1;
PP.y=PreYV1+1;
PP.x1=PreXV2-PreXV1-1;
PP.y1=PreYV2-PreYV1-1;
if ( PP.x1>0 && PP.y1>0 ){
PP.vram_page=0x8001;
PP.fill_patn=0xFFFF;
_iocs_txbox((void*)&PP);
PP.x--;
PP.y--;
PP.vram_page=0x8003;
_iocs_txbox((void*)&PP);
}
*/
}
if ( ssp>=0 )
_iocs_b_super(ssp);
PersView();
return;
}
/*******************************
枠消し
*******************************/
void PosDedraw()
{
DrawWaku(PreXV1,PreYV1,PreXV2,PreYV2,0,0);
}
/*******************************
枠 (クリッピング付き)
cm=0;プリ
1;ファイラー
2;画像
*******************************/
void DrawWaku(x1,y1,x2,y2,cm,cc)
int x1,y1,x2,y2,cm,cc;
{
int min,mx,my,xa,ya,xb,yb;
struct _ptr {
UNshort vram_page;
short x;
short y;
short l;
UNshort line_style;
} PP;
PP.line_style=cc;
if ( cm==0 ){
min=16;
mx=232+16;
my=480+16;
} elif ( cm==1 ){
min=16;
mx=256+16;
my=480+16;
} else {
min=0;
mx=512;
my=512;
}
if ( x1>=mx || x2<min || y1>=my || y2<min )
return;
xa=x1;
xb=x2;
if ( xa<min )
xa=min;
if ( xb>=mx )
xb=mx-1;
ya=y1;
yb=y2;
if ( ya<min )
ya=min;
if ( yb>my )
yb=my-1;
//--- 上の線(x)
if ( y1>=min ){
PP.x=xa+1;
PP.y=y1+1;
PP.l=xb-xa+1;
PP.vram_page=0x8001;
_iocs_txxline((void*)&PP);
PP.x--;
PP.y--;
PP.vram_page=0x8003;
_iocs_txxline((void*)&PP);
}
//--- 左の線(y)
if ( x1>=min ){
PP.x=x1+1;
PP.y=ya+1;
PP.l=yb-ya+1;
PP.vram_page=0x8001;
_iocs_txyline((void*)&PP);
PP.x--;
PP.y--;
PP.vram_page=0x8003;
_iocs_txyline((void*)&PP);
}
//--- 下の線
if ( y2<my ){
PP.x=xa+1;
PP.y=y2+1;
PP.l=xb-xa+1;
PP.vram_page=0x8001;
if ( y2<my-1 )
_iocs_txxline((void*)&PP);
PP.x--;
PP.y--;
PP.vram_page=0x8003;
_iocs_txxline((void*)&PP);
}
//--- 右の線
if ( x2<mx ){
PP.x=x2+1;
PP.y=ya+1;
PP.l=yb-ya+1;
PP.vram_page=0x8001;
if ( x2<mx-1 )
_iocs_txyline((void*)&PP);
PP.x--;
PP.y--;
PP.vram_page=0x8003;
_iocs_txyline((void*)&PP);
}
}
/****************************************************
比率表示
*****************************************************/
void PersView()
{
double b;
//-- DPI
b=(double)ScanDpiY/(double)ScanDpiX;
if ( b<=0 )
p_12W(272+2,96+2,"OVER.");
elif ( b<100. )
p_12_sprintf(272+2,96+2,"%5.2f",b );
elif ( b<1000. )
p_12_sprintf(272+2,96+2,"%5.1f",b );
elif ( b<100000. )
p_12_sprintf(272+2,96+2,"%5d",(int)b );
else p_12W(272+2,96+2,"OVER.");
}
/****************************************************
バー表示
*****************************************************/
void BarView(x,y,lv)
int x,y,lv; //lv=0~62;
{
UNchar *m;
int a,ssp;
struct _fillptr PP;
PP.x1=x*16+lv;
PP.y1=y*16;
PP.x2=PP.x1+2-1;
PP.y2=PP.y1+16-1;
PP.color=PalTable[10];
//--
ssp=_iocs_b_super(0);
m=&MapAdds[x+y*32];
a=TADDS(x,y);
GGSP16_64_S(a,0x15);
GGSP16_64_S(a+=32,0x16);
GGSP16_64_S(a+=32,0x16);
GGSP16_64_S(a+=32,0x17);
if ( ssp>=0 )
_iocs_b_super(ssp);
//--
if ( lv<0 || lv>63 )
return;
//--
_iocs_fill(&PP);
PP.color=PalTable[15];
PP.y2=PP.y1;
_iocs_fill(&PP);
PP.x2=PP.x1;
PP.y2=PP.y1+16-1;
_iocs_fill(&PP);
}
/****************************************************
濃度表示(設定)
*****************************************************/
void BrightSetDraw(br)
int br;
{
if ( Bright!=br )
Bright=br;
if ( ImageColMode!=0 ) // 0;多値 1;二値
return;
BarView(23+4,15,Bright*62/255);
p_12_sprintf(368+2,240+2,"%5d",Bright-128);
return;
}
/****************************************************
明るさ表示(設定)
*****************************************************/
void LightSetDraw(m,r,g,b)
int m,r,g,b;
{
int litup;
litup=1000+41;
if ( jxscanner==_JX350_ )
litup=600+41;
if ( r>=0 ) LightR=r;
if ( g>=0 ) LightG=g;
if ( b>=0 ) LightB=b;
if ( m>=0 ) LightM=m;
if ( jxscanner==_JX350_ ){
//jx350 なら・・・数値の制限
if ( LightR==LightG && LightG==LightB ){
;
} else {
LightR=LightG=LightB;
}
if ( LightR>=0x8000+600 ){
LightR=LightG=LightB=0x8000+600;
}
}
if ( ImageMode==0 ){
// カラー
BarView(368/16+4,272/16,(LightR-0x8000+40)*62/litup );
p_12_sprintf(368+2,272+2,"%5d",LightR-0x8000); //R
BarView(368/16+4,288/16,(LightG-0x8000+40)*62/litup );
p_12_sprintf(368+2,288+2,"%5d",LightG-0x8000); //G
BarView(368/16+4,304/16,(LightB-0x8000+40)*62/litup );
p_12_sprintf(368+2,304+2,"%5d",LightB-0x8000); //B
} else {
BarView(368/16+4,272/16,(LightM-0x8000+40)*62/litup );
p_12_sprintf(368+2,272+2,"%5d",LightM-0x8000); //M
}
return;
}
/****************************************************
γ表示(設定)
*****************************************************/
void GammaSetView(m,r,g,b)
int m,r,g,b;
{
if ( r>=0 ) GammaR=r;
if ( g>=0 ) GammaG=g;
if ( b>=0 ) GammaB=b;
if ( m>=0 ) GammaM=m;
if ( ImageColMode!=0 ) // 0;多値 1;二値
return;
if ( ImageMode==0 ){
// カラー
BarView(368/16+4,336/16,GammaR*62/999 );
p_12_sprintf(368+2,336+2,"%5.2f",GammaR/100.); //R
BarView(368/16+4,352/16,GammaG*62/999 );
p_12_sprintf(368+2,352+2,"%5.2f",GammaG/100.); //G
BarView(368/16+4,368/16,GammaB*62/999 );
p_12_sprintf(368+2,368+2,"%5.2f",GammaB/100.); //B
} else {
BarView(368/16+4,336/16,GammaM*62/999 );
p_12_sprintf(368+2,336+2,"%5.2f",GammaM/100.); //R
}
GammaGraphView();
return;
}
/****************************************************
γグラフ表示(設定)
*****************************************************/
void GammaGraphView()
{
int x,y;
int ssp;
ssp=_iocs_b_super(0);
for(y=21;y<=25;y++)
for(x=16;x<=19;x++)
GGSP16_64_S(TADDS(x,y),MapAdds[x+y*32]);
if ( ssp>=0 )
_iocs_b_super(ssp);
if ( ImageMode==0 ){
// カラー
if ( GammaR==GammaG && GammaR==GammaB ){
// 同じ
for(x=0;x<47;x+=2)
GammaGraphView_sub(x,GammaR,0xF);
} else {
for(x=0;x<47;x+=2){
GammaGraphView_sub(x,GammaR,7);
GammaGraphView_sub(x,GammaG,6);
GammaGraphView_sub(x,GammaB,5);
}
}
} else {
for(x=0;x<47;x+=2)
GammaGraphView_sub(x,GammaM,0x0F);
}
return;
}
/*+++*/
void GammaGraphView_sub(x,g,c)
int x,g,c;
{
int i;
//struct _txfillptr PP;
double a,b;
if ( g==0 )
return;
b=(double)g/100.;
a=(pow((double)x/47.,(1./b)))*47*4/3;
i=VADDS(0,17*16+x,(int)(25.*16.-1.-a+0.5));
GGPSET(i ,PalTable[c]);
GGPSET(i+2,PalTable[1]);
}
/****************************************************
しきい値表示(設定)
*****************************************************/
void ThreSetView(m,r,g,b)
int m,r,g,b;
{
if ( r>=0 ) ThreR=r;
if ( g>=0 ) ThreG=g;
if ( b>=0 ) ThreB=b;
if ( m>=0 ) ThreM=m;
if ( ImageColMode==0 ) // 0;多値 1;二値
return;
if ( ImageMode==0 ){
// カラー
BarView(368/16+4,416/16,ThreR*62/255 );
p_12_ito4a(368+2,416+2,ThreR); //R
BarView(368/16+4,432/16,ThreG*62/255 );
p_12_ito4a(368+2,432+2,ThreG); //G
BarView(368/16+4,448/16,ThreB*62/255 );
p_12_ito4a(368+2,448+2,ThreB); //B
} else {
BarView(368/16+4,416/16,ThreM*62/255 );
p_12_ito4a(368+2,416+2,ThreM); //M
}
return;
}
/****************************************************
Dropカラー表示(設定)
*****************************************************/
void DropColorSetView(md)
int md; // 0;なし 1;R 2;G 3;B
{
int i,j;
int ssp;
if ( md>=0 )
DropColor=md;
if ( ImageMode!=1 )
return;
ssp=_iocs_b_super(0);
for(i=0;i<=3;i++){
j=23+i*2;
if ( i==DropColor ){
GGSP16_ON_S(TADDS(j,30),MapAdds[j +30*32],MapAdds[j+1+30*32]);
} else {
GGSP16_OF_S(TADDS(j,30),MapAdds[j +30*32],MapAdds[j+1+30*32]);
}
}
if ( ssp>=0 )
_iocs_b_super(ssp);
return;
}
/*************************************
*************************************/
void GGSP16_ON_S(ad,pt1,pt2)
int ad,pt1,pt2;
{
GGSP16_64_S(ad,pt1);
GGSP16_64_S(ad+32,pt2);
GGICON_ON_S(ad);
GGICON_ON_S(ad+32);
}
/*+++*/
void GGSP16_OF_S(ad,pt1,pt2)
int ad,pt1,pt2;
{
GGSP16_64_S(ad,pt1);
GGSP16_64_S(ad+32,pt2);
}
/*+++*/
void GGSP16_ON(ad,pt1,pt2)
int ad,pt1,pt2;
{
int i,j,ssp;
ssp=_iocs_b_super(0);
GGSP16_ON_S(ad,pt1,pt2);
if ( ssp>=0 )
_iocs_b_super(ssp);
}
/*+++*/
void GGSP16_OF(ad,pt1,pt2)
int ad,pt1,pt2;
{
int i,j,ssp;
ssp=_iocs_b_super(0);
GGSP16_OF_S(ad,pt1,pt2);
if ( ssp>=0 )
_iocs_b_super(ssp);
}